// 解题思路：
// 使用贪心的策略：
// 第一步：找到出现次数最多的字符，记录该字符并统计出现次数
// 判断长度是否超过数组的一半长，超过返回 no, 不超过先返回一个 yes
// 第二步：新建一个数组，将出现次数最多的字符填在数组的偶数位置
// 第三步：再填剩下的字符，如果偶数位置填满了，就从奇数位置开始填，直至填完所有字符

import java.util.*;
import java.io.*;

public class RearrangeCharacters {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String s = in.next();
        char[] sArr = s.toCharArray();
        int[] check = new int[26];
        int max = 0;
        int index = 0;
        for(char ch : sArr){
            check[ch - 'a']++;
            if(max < check[ch - 'a']){
                max = check[ch - 'a'];
                index = ch - 'a';
            }
        }
        if(max > (n + 1) / 2) {
            System.out.println("no");
            return;
        }

        System.out.println("yes");

        char[] arr = new char[n];
        int i = 0;
        while(max-- > 0){
            arr[i] = (char)('a' + index);
            i += 2;
        }
        for(int j = 0; j < 26; j++){
            if(check[j] != 0 && j != index){
                int count = check[j];
                while(count-- > 0){
                    if(i >= n){
                        i = 1;
                    }
                    arr[i] = (char)('a' + j);
                    i += 2;
                }
            }
        }

        for(int k = 0; k < n; k++){
            System.out.print(arr[k]);
        }
    }
}
